//配置axios
// 引入storage
import storage from "@/utils/storage"
import axios from "axios"
// import storage from "./storage"
// 引入进度条
import nprogress from "nprogress"
import 'nprogress/nprogress.css'
//引入elementui的弹框
import aa,{ Loading, Message, MessageBox } from 'element-ui';
// console.log(aa)
let http = axios.create({
    baseURL: "/api",
    timeout: 5000,//超时设置
    withCredentials: true,//携带本地凭据 比如cookie
})

//全局的请求拦截器 对接口的请求批量进行统一处理
let fullScreenLoading=null
http.interceptors.request.use(config => {
    //打开进度条
    nprogress.start()
    // 先获取本地token,然后携带给后端
    let token=storage.get('qf-token')
    // console.log(token)
    config.headers['authorization']=token

    // 登录时打开加载动画
    // console.log(config)
    // fullScreenLoading=Loading.service({
    //     locak:true,
    //     text:'Loading',
    //     spinner:'el-icon-loading',
    //     background:'rgba(0,0,0,0.6)',
    // })
    if(config.url.indexOf('login')!==-1 || config.url.indexOf('wechatLogin')!==-1){
        fullScreenLoading=Loading.service({
            lock:true,
            text:'Loading...',
            spinner:'el-icon-loading',
            background:'rgba(0,0,0,0.8)',
        })
    }
    // config就是所有的请求配置
    return config //放行 不return 那么不能将请求真正的发送出去
})

//全局响应拦截 统一对错误进行处理
http.interceptors.response.use(config => {
    // 关闭进度条
    nprogress.done()
    // console.log('config', config)
    // 判断fullScreenLoading,响应完成关闭加载动画
    if(fullScreenLoading){
        fullScreenLoading.close()
        fullScreenLoading=null
    }
    let { state, msg } = config.data;
    if (!state) {
        //后台响应了错误的结果
        MessageBox({
            message: msg,
            title: '错误提示',
            type: 'error'
        })
    }
    //10022和1004和10026分别对应token过期和session过期和没有权限
    // 清掉本地缓存和token
    let {code}=config.data
    if(code==='10022' || code==='1004'){
        Message.error('登录过期,请重新登录')
        storage.rm('qf-token')
    }

    return config //如果不return axios请求就拿不到响应结果
})

export default http;